#pragma once

#include "../materials/MUltiPhasePyrolysisMaterial.h"
#include "../materials/PyrolysisGasPropertyMaterial.h"
#include "TimeDerivative.h"


class PyrolysisTimeDerivativeKernel : public TimeDerivative
{
public:
	PyrolysisTimeDerivativeKernel(const InputParameters & parameters);

protected:
  virtual Real computeQpResidual();
  virtual Real computeQpJacobian();

private:
  const MaterialProperty<Real> & _rhos;
  const MaterialProperty<Real> & _cps;
  const MaterialProperty<Real> & _rhog;
  const MaterialProperty<Real> & _cpg;
  const MaterialProperty<Real> & _porosity;
  const MaterialProperty<Real>& _rhos_old;
  const MaterialProperty<Real>& _cps_old;
  const MaterialProperty<Real>& _rhog_old;
  const MaterialProperty<Real>& _cpg_old;
  const MaterialProperty<Real>& _porosity_old;
  const VariableValue& _T;
  const VariableValue& _T_old;
};


template<>
InputParameters validParams<PyrolysisTimeDerivativeKernel>();
